pub mod rayon_impl;

pub trait MutExecutor<I, O>
where 
    I:Send + Sync + 'static,
    O:Send + Sync + 'static,
    Self:Send + Sync + 'static,
{
    type Error:std::error::Error;
    fn exec<'scope, F:FnMut(O)>(&'scope mut self, input:I, output:F) -> Result<(), Self::Error>;
}

pub trait ImmutExecutor<I, O>
where 
    I:Send + Sync + 'static,
    O:Send + Sync + 'static,
    Self:Send + Sync + 'static, 
{
    type Error:std::error::Error;
    fn exec<'scope, F:FnMut(O)>(&'scope self, input:I, output:F) -> Result<(), Self::Error>;
}